package org.i1510.common.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.i1510.common.bean.PageBean;
import org.i1510.common.dao.ISysCompanyDao;
import org.i1510.common.po.SysCompany;
import org.i1510.common.service.ISysCompanyService;
import org.i1510.common.utils.KBProperties;
import org.i1510.common.utils.StringUtils;
import org.i1510.common.utils.web.ResultMapper;
import org.i1510.common.utils.web.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value = "/admin/sysCompany")
public class SysCompanyController {
	private static final Logger logger = LoggerFactory
			.getLogger(SysCompanyController.class);
	@Autowired
	private ISysCompanyService iSysCompanyService;
	@Autowired
	private ISysCompanyDao iSysCompanyDao;

	private ResultMapper mapper;

	/**
	 * @Author Rambo
	 * @Desc：保存对象
	 * @param sysCompany
	 * @param errors
	 * @return TODO
	 * @Version SysCompanyController.java,v 1.1 2013-11-15 下午4:20:56
	 */
	@RequestMapping(value = "/save", method = RequestMethod.POST)
	@ResponseBody
	public String save(HttpServletRequest request,
			@Valid @ModelAttribute("sysCompany") SysCompany sysCompany,
			BindingResult errors) {

		if (errors.hasErrors()) {
			mapper = WebUtils.getMapper4Errors(errors);
		} else {
			sysCompany.setDocStatus("10");
			mapper = iSysCompanyService.save(sysCompany, request);
		}

		return mapper.toJson();
	}

	/**
	 * @Author Rambo
	 * @Desc：删除对象
	 * @param docId
	 * @param errors
	 * @return TODO
	 * @Version SysCompanyController.java,v 1.1 2014-9-2 下午3:38:17
	 */
	@RequestMapping(value = "/deleteX", method = RequestMethod.POST)
	@ResponseBody
	public String deleteX(@Valid @ModelAttribute("docId") String docId,
			BindingResult errors) {

		if (errors.hasErrors()) {
			mapper = WebUtils.getMapper4Errors(errors);
		} else {
			mapper = iSysCompanyService.delete(docId);
		}

		return mapper.toJson();
	}

	/**
	 * @Author Rambo
	 * @Desc：查看对象
	 * @param docId
	 * @param errors
	 * @return TODO
	 * @Version SysCompanyController.java,v 1.1 2014-9-2 下午3:39:35
	 */
	@RequestMapping(value = "/view", method = RequestMethod.GET)
	@ResponseBody
	public String view(@Valid @ModelAttribute("docId") String docId,
			BindingResult errors) {
		ResultMapper mapperRtn = ResultMapper.generateFailure();
		if (errors.hasErrors()) {
			mapperRtn = WebUtils.getMapper4Errors(errors);
		} else {
			SysCompany sysCompany = iSysCompanyService.findById(docId);
			mapperRtn = ResultMapper.generateSuccess();
			mapperRtn.appendResult("data", sysCompany);
		}
		return mapperRtn.toJson();
	}

	@RequestMapping(value = "/list", method = RequestMethod.GET)
	@ResponseBody
	public String list(@ModelAttribute("fromDate") String fromDate,
			@ModelAttribute("toDate") String toDate,
			@Valid @ModelAttribute("sysCompany") SysCompany sysCompany,
			@Valid @ModelAttribute("pageBean") PageBean pageBean,
			BindingResult errors) {
		ResultMapper mapperRtn = ResultMapper.generateFailure();
		if (errors.hasErrors()) {
			mapperRtn = WebUtils.getMapper4Errors(errors);
		} else {
			Map conditions = new HashMap();
			conditions.put("fromDate", fromDate);
			conditions.put("toDate", toDate);
			List sysCompanys = iSysCompanyService.getPage(sysCompany, pageBean,
					conditions);
			int totalCount = iSysCompanyService.getPageCount(sysCompany,
					conditions);
			Map map = new HashMap();
			map.put("pageNo", pageBean.getPageNo());
			map.put("pageSize", pageBean.getPageSize());
			map.put("totalCount", totalCount);
			map.put("listData", sysCompanys);

			mapperRtn = ResultMapper.generateSuccess();
			mapperRtn.appendResult("data", map);
		}
		return mapperRtn.toJson();
	}

	@RequestMapping(value = "/listExt", method = { RequestMethod.POST,
			RequestMethod.GET })
	@ResponseBody
	public String listExt(@Valid @ModelAttribute("start") String start,
			@Valid @ModelAttribute("limit") String limit,
			@Valid @ModelAttribute("sysCompany") SysCompany sysCompany,
			@Valid @ModelAttribute("sDocSubject") String sDocSubject,
			@Valid @ModelAttribute("sCompany") String sCompany,
			@Valid @ModelAttribute("pageBean") PageBean pageBean,
			BindingResult errors) {

		ResultMapper mapperRtn = ResultMapper.generateFailure();

		if (errors.hasErrors()) {

			mapperRtn = WebUtils.getMapper4Errors(errors);

		} else {

			Map conditions = new HashMap();
			conditions.put("sCompany", sCompany);
			conditions.put("sDocSubject", sDocSubject);

			if (!"".equals(start) && !"".equals(limit)) {

				pageBean.setIntPageIndex(StringUtils.String2Integer(start) != 0 ? (StringUtils
						.String2Integer(start)) : 0);

				pageBean.setIntPageSize(StringUtils.String2Integer(limit) != 0 ? (StringUtils
						.String2Integer(limit)) : 0);

			} else {

				pageBean.setIntPageIndex(0);

				pageBean.setIntPageSize(KBProperties.PAGESIZE);

			}

			List list = iSysCompanyService.getPage(sysCompany, pageBean,
					conditions);

			int totalCount = iSysCompanyService.getPageCount(sysCompany,
					conditions);

			mapperRtn = ResultMapper.generateSuccess();

			mapperRtn.appendResult("total", totalCount);

			mapperRtn.appendResult("root", list);

		}

		return mapperRtn.toJson();

	}

	/**
	 * @Author Rambo
	 * @Desc：状态修改
	 * @param request
	 * @param docId
	 * @param docStatus
	 * @param errors
	 * @return TODO
	 * @Version CateController.java,v 1.1 2014-9-11 上午10:06:04
	 */
	@RequestMapping(value = "/updateStatus", method = RequestMethod.POST)
	@ResponseBody
	public String updateStatus(HttpServletRequest request,
			@Valid @ModelAttribute("docId") String docId,
			@Valid @ModelAttribute("docStatus") String docStatus,
			BindingResult errors) {

		if (errors.hasErrors()) {
			mapper = WebUtils.getMapper4Errors(errors);
		} else {
			if (!StringUtils.isStringEmpty(docId)) {
				SysCompany sysCompany = new SysCompany();

				sysCompany.setDocId(docId);
				sysCompany.setDocStatus(docStatus);
				mapper = iSysCompanyService.save(sysCompany, request);
			} else {
				mapper = ResultMapper.generateFailure();
				mapper.appendResult("messages", "无法找到该ID!");
			}

		}

		return mapper.toJson();
	}
}